package com.dong.designpattern.factory.abstractfactory;

/**
 * 抽象工厂: 可以任意定制产品一族
 * <p>
 * 任意定制交通工具：继承Moveable
 * 任意定制生产过程：实现一个新的 Movable XxxFactory.create() 即可
 * 任意定制产品一族：实现 抽象工厂、具体工厂，抽象产品、具体产品
 *
 * 思考一点：注意这里的Food、Vehicle、Weapon为啥使用的是abstract class，而不是interface呢？
 * 马老师说：这里主要是语义的问题，因为这里Food代指一个具体事物，所以用抽象类比较合适；
 * 而前面提到的Moveable，可移动的，就用interface比较合适，同时它的实现类还可以实现可吃的、可玩的等其他接口。
 * （总结：名词用抽象类，形容词用接口）
 *
 * @author by jiweidong on 2021/11/18.
 */
public abstract class AbstractFactory {

    abstract Food createFood();

    abstract Weapon createWeapon();

    abstract Vehicle createVehicle();
}
